﻿//ORIGINAL CODE

////TODO: EstimateBackground: test, speed up, average color detection correction

//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Drawing;

//namespace LowLevelGraphics.Filter
//{
//    public class EstimateBoundingBox : BaseImageFilter
//    {
//        List<Range> m_aRange = new List<Range>();
//        List<Range> m_aLeftRange = new List<Range>();
//        List<Range> m_aRightRange = new List<Range>();
//        private Color colorReplace = Color.Transparent;
//        private int m_nDistanceThreshold = 120;

//        public EstimateBoundingBox()
//            : this(Color.Blue)
//        {

//        }

//        public EstimateBoundingBox(Color _colorReplace)
//        {
//            colorReplace = _colorReplace;
//        }

//        public List<Range> Ranges
//        {
//            get { return m_aRange; }
//        }

//        public List<Range> LeftRanges
//        {
//            get { return m_aLeftRange; }
//        }

//        public List<Range> RightRanges
//        {
//            get { return m_aRightRange; }
//        }


//        //TODO: improve
//        /// <summary>
//        /// Tries To eliminate all but Background informations
//        /// </summary>
//        /// <param name="_bitmap"></param>
//        public override void Execute(Bitmap _bitmap)
//        {
//            m_aRange.Clear();
//            m_aLeftRange.Clear();
//            m_aRightRange.Clear();

//            Bitmap bitmapCloned = new RoundColorsUnsafe(10, false).ExecuteCloned(_bitmap);
//            Bitmap bitmap = _bitmap;
//            Graphics graphics = Graphics.FromImage(bitmap);
//            int y = 0;
//            int x = 0;

//            Pen pen = new Pen(new SolidBrush(colorReplace));

//            int nRaverage = -1;
//            int nGaverage = -1;
//            int nBaverage = -1;

//            for (y = 0; y < _bitmap.Height; y++)
//            {
//                List<Color> aColor = new List<Color>();
//                for (x = _bitmap.Width - 1; x >= 0; x--)
//                {
//                    Color color = bitmapCloned.GetPixel(x, y);
//                    aColor.Add(color);
//                    Color colorAverage = ColorFunctions.AverageColor(aColor);

//                    if (color != colorAverage)
//                    {
//                        int nDistance = ColorFunctions.Distance(color, colorAverage);
//                        if (nDistance > m_nDistanceThreshold)
//                        {
//                            if (colorReplace != Color.Transparent)
//                            {
//                                graphics.DrawLine(pen, x, y, x + aColor.Count, y);
//                            }
//                            Range range = new Range(x, x + aColor.Count, y, pen.Color);
//                            m_aRange.Add(range);
//                            m_aRightRange.Add(range);
//                            aColor.Clear();
//                            break;
//                        }
//                    }
//                }

//                for (x = 0; x < _bitmap.Width; x++)
//                {
//                    Color color = bitmapCloned.GetPixel(x, y);
//                    aColor.Add(color);
//                    Color colorAverage = ColorFunctions.AverageColor(aColor);

//                    if (color != colorAverage)
//                    {
//                        int nDistance = ColorFunctions.Distance(color, colorAverage);
//                        if (nDistance > m_nDistanceThreshold)
//                        {
//                            if (colorReplace != Color.Transparent)
//                            {
//                                graphics.DrawLine(pen, x - aColor.Count, y, x, y);
//                            }
//                            Range range = new Range(x - aColor.Count, x, y, pen.Color);
//                            m_aRange.Add(range);
//                            m_aLeftRange.Add(range);
//                            aColor.Clear();
//                            break;
//                        }
//                    }
//                }
//            }
//        }
//    }
//}
